package com.gk.panda.apis.patrol.servicr;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.gk.panda.apis.Vo.UserOrgVo;
import com.gk.panda.commons.result.Result;
import com.gk.panda.pojo.patrol.dto.*;
import com.gk.panda.pojo.patrol.entity.PatrolEntity;
import com.gk.panda.pojo.patrol.request.*;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * @Author：xxz
 * @Create: 2022/11/1 15:47
 */
public interface PatrolService extends IService<PatrolEntity> {

    /**
     * 创建巡护
     *
     * @param request
     * @return
     */
    Result<?> create(SavePatrolRequest request);

    /**
     * 停止巡护
     *
     * @param request
     * @return
     */
    Result<?> stop(StopPatrolRequest request);

    /**
     * 检测当前用户是否有未完成的巡护
     *
     * @return
     */
    Result<?> check();

    /**
     * 根据创建人查询未结束的巡护
     *
     * @param name
     * @return
     */
    PatrolEntity getPatrolByName(String name);

    /**
     * 创建订单
     *
     * @param type   type规则使用总站缩写
     * @param format 时间格式 规则 yyyyMMddHHmmss
     * @return
     */
    String createOrderNum(String type, String format);

    /**
     * 巡护统计
     *
     * @return
     */
    PatrolSumDTO countData(PatrolQueryPageRequest request);

    /**
     * 根据类型获取巡护 ids
     *
     * @param type
     * @return
     */
    List<Long> getIdsByType(String type);

    /**
     * 上报事件 求和
     *
     * @param type
     * @return
     */
    PatrolCountDTO countPatrol(String type);


    /**
     * 巡护分页查询
     *
     * @param request
     * @return
     */
    Page<PatrolPageDTO> page(PatrolQueryPageRequest request);

    /**
     * 根据用户名机构信息
     *
     * @param name
     * @return
     */
    UserOrgVo getOrgByName(String name);

    /**
     * 删除巡护
     *
     * @param id
     * @return
     */
    Result<?> remove(Long id);

    /**
     * 修改巡护
     *
     * @param request
     * @return
     */
    Result<?> update(UpdatePatrolRequest request);

    /**
     * 批量导出巡护信息
     *
     * @param response
     */
    void export(HttpServletResponse response, PatrolQueryPageRequest request);

    /**
     * 根据id查询 巡护信息
     *
     * @param id
     * @return
     */
    DetailListDTO getPatrolById(Long id);

    /**
     * 查询 巡护列表
     *
     * @param request
     * @return
     */
    Page<PatrolListDTO> PatrolList(PatrolListRequest request);

    Result<MyPatrolDTO> myPatrol();

    /**
     * 提交位置信息
     *
     * @param request
     */
    void location(LocationRequest request);

    /**
     * 统计分页查询后的类型 数量 ---PC巡护事件管理
     *
     * @param type
     * @param request
     * @return
     */
    Long getCountPatrol(String type, PageReportRequest request);

    /**
     * 获取巡护编辑信息
     *
     * @param patrolId
     * @return
     */
    UpdateInfoDTO updateInfo(Long patrolId);

    /**
     * 批量提交位置信息
     *
     * @param request
     * @return
     */
    Result<?> BatchLocation(BatchLocationRequest request);

    /**
     * 计算巡护海拔高差
     * @param id
     * @return
     */
    HeightDTO getHeight(Long id);
}
